package br.com.sipsoft.svola.dirf;
import java.util.ArrayList;
import java.util.List;

import br.com.sipsoft.svola.entidades.ResultDirf;
import br.com.sipsoft.svola.entidades.TipoPessoa;

public class DirfPessoaFisica  extends Dirf {

	private	boolean dependentes, impostoRetido, pensaoAlimenticia, previdenciaPrivada, previdenciaSocial, rendimentosTributaveis;
	
	
	public void valorDefaultTodosRegistros(boolean value){
		
		dependentes = value;
		impostoRetido = value;
		pensaoAlimenticia = value;
		previdenciaPrivada= value;
		previdenciaSocial = value;
		rendimentosTributaveis = value;
				
	}
	
	
	
	public List<ResultDirf>  processar(List<String> lines) {

		boolean processarNextLine = false;
		
		
		int j = 0;

		List<ResultDirf> retorno = new ArrayList<ResultDirf>();

		String nome = null;
		String cpf = null;

		for (int i = 0; i < lines.size(); i++) {
			String linha = lines.get(i);
			
			
			if (linha.trim().indexOf("Codigo Receita") >= 0
					&& linha.trim().indexOf("CPF") >= 0
					&& linha.trim().indexOf("Nome") >= 0) {
				processarNextLine = true;
				j = 0;
			} else {

				if (processarNextLine) {

					ResultDirf resulDirf = null;

					if (nome != null) {
						resulDirf = new ResultDirf(nome.trim(), cpf.trim(), TipoPessoa.FISICA);		
					}
					
					
					switch (j) {
					
					case 0:
						cpf = linha.substring(18, 33);
						nome = linha.substring(34);
						j++;
						break;
						
					default:
						TipoRegistro tipoRegistro = TipoRegistro.getTipoRegistro(linha.trim());
						
						if (tipoRegistro == null && ! algumTipoProcessamentoSelecionado())
						continue;
							
						if (tipoRegistro != null)
						
						switch (tipoRegistro) {
						case DEPENDETENS:
							valorDefaultTodosRegistros(false);
							dependentes = true;
							continue;
							
						case IMPOSTO_RETIDO :
							valorDefaultTodosRegistros(false);
							impostoRetido = true;
							continue;
						case PENSAO_ALIMENTICIA :
							valorDefaultTodosRegistros(false);
							pensaoAlimenticia = true;
							continue;
						case PREVIDENCIA_PRIVADA:
							valorDefaultTodosRegistros(false);
							previdenciaPrivada = true;
							
							continue;
						case PREVIDENCIA_SOCIAL:
							valorDefaultTodosRegistros(false);
							previdenciaSocial = true;
							
							continue;
							
						
						case RENDIMENTOS_TRIBUTAVEIS:
							valorDefaultTodosRegistros(false);
							rendimentosTributaveis = true;
							
							continue;
						}						
						
						
						if (rendimentosTributaveis){
							
							String values[] = linha.split(" ");
							resulDirf.addRendimentosTributaveis(parse(values));
							retorno.add(resulDirf);
							System.out.println("valores tributaveis");
							
							
						}
						
						
						
						if (dependentes){
							String values[] = linha.split(" ");
							resulDirf.addDependentes(parse(values));
							retorno.add(resulDirf);
							System.out.println("valor dependentes");
							
						}
							
						if (impostoRetido){
							
							String values[] = linha.split(" ");
							resulDirf.addImpostoRetido(parse(values));
							retorno.add(resulDirf);
							System.out.println("valor imposto retido");
							processarNextLine = false;
							nome = null;
							cpf = null;
						}
							
							
							
						if (pensaoAlimenticia){
							String values[] = linha.split(" ");
							resulDirf.addPensaoAlimenticia(parse(values));
							System.out.println("valor pensao alimenticia");
							retorno.add(resulDirf);	
							
						}
							
						
						if (previdenciaPrivada){
							String values[] = linha.split(" ");
							resulDirf.addPrevidenciaPrivada(parse(values));
							retorno.add(resulDirf);
							System.out.println("valor fapi");
						}
							
						if (previdenciaSocial){
							
							String values[] = linha.split(" ");
							resulDirf.addPrevidenciaOficial(parse(values));
							retorno.add(resulDirf);
							System.out.println("valor previdencia oficial");
						}
							
						
					valorDefaultTodosRegistros(false);		
					j++;
				}

				}
				

			}
		}
		
		return retorno;

	}

	
	private boolean algumTipoProcessamentoSelecionado(){		
		
		return dependentes || impostoRetido || pensaoAlimenticia || previdenciaPrivada || previdenciaSocial || rendimentosTributaveis;
		
	}
	
	
}
